package com.itheima.sh.pojo.bean;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @Description:
 * @Version: V1.0
 * 单例Bean 现象
 * 1、通过构造器注入，会出现循环依赖的现象，并且容器启动失败                【无法解决】
 * 2、通过set注入，不会出现循环依赖的现象，帮助我们解决了循环依赖的问题！      [解决循环依赖]
 * 3、A 用构造器， B set注入：                                        【无法解决】
 * 4、A 用set注入， B 构造器注入：                                      [解决循环依赖]
 *
 * 总结： 只要是主Bean是set注入，就可以解决Spring的循环依赖的现象
 *
 * 多例Bean 现象
 * 1、Set注入 两个Bean同时配置了 prototype，会出现循环依赖的现象，只要有一方是单例就可以解决
 * 2、构造器注入  所有情况都会出现循环依赖的现象
 * 3、A 用构造器， B set注入
 *      A prototype  B singlton      解决循环依赖
 *      A singlton   B prototype    【无法解决】
 *      A prototype  B prototype    【无法解决】
 * 4、A 用set注入， B 构造器注入
 *      A prototype  B singlton     【无法解决】
 *      A singlton   B prototype     解决循环依赖
 *      A prototype  B prototype    【无法解决】
 */
public class BeanTest {

    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        Object beanA = applicationContext.getBean("beanA");
        System.out.println(beanA);
    }
}
